
package ija.model.types;

import ija.xls.notation.DeskCoordinate;
import ija.xls.notation.GameMove;
import ija.xls.notation.types.GameOperation;
import java.util.ArrayList;

/**
 * Třída reprezentuje strom všech možných tahů.
 * @author Radek Necas, xnecas18
 */
public class GameMoves {

    private GameOperation type;
    private Tree<FigureRoute> positions;
    
    
    /**
     * Vytvorí objekt popisující všechny možné tahy dané figurky
     * @param positions všechny možné pozice, kterých je při tahu dosaženo
     * @param op typ tahu (move, jump, ..)
     */
    public GameMoves(Tree<FigureRoute> positions, GameOperation op) {
        type = op;
        this.positions = positions;
    }
    
    
    /**
     * @return všechny pozice.
     */
    public Tree<FigureRoute> getPositions() {
        return positions;
    }
    
    /**
     * @return typ tahu.
     */
    public GameOperation getOperationType() {
        return type;
    }
    
    /**
     * Metoda testuje zda je obsazen zadany tah
     * @param gm testovany tah
     * @return true pokud je tah obsažen, jinak false
     */
    public boolean containsMove(GameMove gm) {
        if(gm.getOperation() != type || gm.getPositions().isEmpty()) {
            return false;
        }
        ArrayList<FigureRoute> routes = new ArrayList();
        for(DeskCoordinate coord: gm) {
            routes.add(new FigureRoute(coord, null));
        }
        return this.positions.isInside(routes);
    }
    
}
